// 函数，函数是通过关键字 fn 定义的

/// FizzBuzz函数示例
fn fizz_buzz(num: i32) -> String {
    if num % 15 == 0 {
        "fizz_buzz".to_string()
    } else if num % 3 == 0 {
        "fizz".to_string()
    } else if num % 5 == 0 {
        "buzz".to_string()
    } else {
        num.to_string()
    }
}

pub fn start() {
    assert_eq!(fizz_buzz(15), "fizz_buzz".to_string());
    assert_eq!(fizz_buzz(3), "fizz".to_string());
    assert_eq!(fizz_buzz(5), "buzz".to_string());
    assert_eq!(fizz_buzz(13), "13".to_string());
}

#[cfg(test)]
mod tests {
    use std::borrow::Cow;

    /// 这点是想起来的随手写的
    /// 主要是想起Cow
    #[test]
    fn test_cow() {
        println!("{}", del_white_space(&"this is ok".to_string()));
        println!("{}", del_white_space(&"isOk".to_string()));
    }

    /// 删除空白
    fn del_white_space(data: &String) -> Cow<String> {
        if data.contains(" ") {
            Cow::Owned(data.split_whitespace().collect())
        } else {
            // 没有空白字符的时候，就直接返回当前的数据，不需要新建一个String类型
            // 节约了空间
            Cow::Borrowed(data)
        }
    }
}
